
package com.budwk.app.sqfwV2.component;

import com.budwk.app.util.poiUtils.CommonFormOfficeUtils;
import com.budwk.app.util.poiUtils.UrlImageInfo;
import com.budwk.app.util.poiUtils.nutzBeanUtils.NutzIocUtils;
import com.deepoove.poi.data.PictureRenderData;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nutz.ioc.loader.annotation.IocBean;

import java.util.List;
import java.util.Map;

/**
 * 签名照服务类
 */

@IocBean
@Slf4j
public class SignImageComponent {


    /**
     * 该方法只会取第一张图片
     * @param map
     * @param targetLength 图片宽度
     * @param imageUrl 图片url
     * @param imageUrlStr 图片url为空时填充的数据
     */
    public static void signWord(Map<String, Object> map, Float targetLength, String imageUrl, String imageUrlStr, String imageKey, String imageKeyStr) {
        map.put(imageKey, null);
        map.put(imageKeyStr, "");
        if (StringUtils.isNotEmpty(imageUrl)) {
            if (targetLength == null) {
                targetLength = 1.0F;
            }
            map.put(imageKey, CommonFormOfficeUtils.addWordPicture(imageUrl, targetLength));
        } else {
            map.put(imageKeyStr, imageUrlStr);
        }
    }


    /**
     * 展示全部图片：word中格式为：  {{?imagess}}{{@images}}{{/imagess}}
     * @param map
     * @param imageSize 图片张数
     * @param imageUrl 图片路径
     * @param imageKey 存储key
     * @param imageKeyStr 单个图片key
     */
    public static void signWordImages(Map<String, Object> map, Integer imageSize, String imageUrl, String imageKey, String imageKeyStr, Float imageWidth, Float imageHeight) {
        if (StringUtils.isEmpty(imageUrl)) {
            map.put(imageKey, null);
            return;
        }
        List<String> images = List.of(imageUrl.split(","));
        images = imageSize != null ? images.subList(0, imageSize) : images;
        imageWidth = imageWidth == null ? 12F : imageWidth;
        imageHeight = imageHeight == null ? 10.5F : imageHeight;
        List<Map<String, PictureRenderData>> pictures = CommonFormOfficeUtils.addWordPicture(images, imageKeyStr, imageWidth, imageHeight);
        map.put(imageKey, pictures);
    }

    /**
     *
     * @param map
     * @param picNum 图片张数 为空时默认传递一张
     * @param imageUrl 图片url 多张之间采用,号分割
     * @param imageUrlDefaultValue 图片url为空时填充的数据
     */
    public static void signExcel(Map<String, Object> map, Integer picNum, String imageUrl, String imageUrlDefaultValue, String imageKey, String imageKeyStr) {
        map.put(imageKey, null);
        map.put(imageKeyStr, "");
        if (StringUtils.isNotEmpty(imageUrl)) {
            if (picNum == null) {
                // 默认填充1张图片
                picNum = 1;
            }
            map.put(imageKey, CommonFormOfficeUtils.addPictureToByteList(imageUrl, picNum));
        } else {
            map.put(imageKeyStr, imageUrlDefaultValue);
        }
    }

    /**
     * 下载图片固定宽和高
     * @param imageUrl
     * @param targetLength
     * @param targetHeight
     * @return
     */
    public static UrlImageInfo getImageUrl(String imageUrl, Integer targetLength, Integer targetHeight) {
        String imageSourceUrl = imageUrl; // 原始文件url
        UrlImageInfo urlImageInfo = null;
        try {
            if (imageUrl.startsWith("/"))
                imageUrl = NutzIocUtils.getOssPrefix() + imageUrl;
            // 从网络上读取图片然后得到输入流和宽高
            if (targetHeight != null) {
                urlImageInfo = new UrlImageInfo(imageUrl, targetLength, targetHeight);
                urlImageInfo = new UrlImageInfo(urlImageInfo.getBytes(), targetLength, targetLength);
            }
        } catch (Exception e) {
            if (imageSourceUrl.startsWith("/"))
                imageSourceUrl = NutzIocUtils.getOssPrefixHuaWei() + imageSourceUrl;
            if (targetHeight != null) {
                urlImageInfo = new UrlImageInfo(imageSourceUrl, targetLength, targetHeight);
            }
        }
        return urlImageInfo;
    }
}
